home *** CD-ROM | disk | FTP | other *** search
/ Team Palmtops 7 / Palmtops_numero07.iso / WinCE / SDKWindowsCE / HandHeldPCPro30 / sdk.exe / Jupiter SDK / data1.cab / Emulation_Include_Files / secpkg.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-02-19  |  23.1 KB  |  863 lines

  1. /*++
  2.  
  3. Copyright (c) 1992-1998 Microsoft Corporation
  4.  
  5. Module Name: secpkg.h
  6.  
  7. Purpose: Global definitions for security packages. Everything specific to 
  8.          writing a security package.
  9.  
  10. --*/
  11.  
  12. #ifndef __SECPKG_H__
  13. #define __SECPKG_H__
  14.  
  15. // #include <ntlsa.h> // SECURITY_LOGON_TYPE
  16.  
  17. #ifdef SECURITY_KERNEL
  18. //
  19. // Can't use the windows.h def'ns in kernel mode.
  20. //
  21. typedef PVOID                   SEC_THREAD_START;
  22. typedef PVOID                   SEC_ATTRS;
  23. #else
  24. typedef LPTHREAD_START_ROUTINE  SEC_THREAD_START;
  25. typedef LPSECURITY_ATTRIBUTES   SEC_ATTRS;
  26. #endif
  27.  
  28.  
  29.  
  30.  
  31. //
  32. // The following structures are used by the helper functions
  33. //
  34.  
  35. typedef struct _SECPKG_CLIENT_INFO {
  36.     LUID            LogonId;            // Effective Logon Id
  37.     ULONG           ProcessID;          // Process Id of caller
  38.     ULONG           ThreadID;           // Thread Id of caller
  39.     BOOLEAN         HasTcbPrivilege;    // Client has TCB
  40.     BOOLEAN         Impersonating;      // Client is impersonating
  41. } SECPKG_CLIENT_INFO, * PSECPKG_CLIENT_INFO;
  42.  
  43. typedef struct _SECPKG_CALL_INFO {
  44.     ULONG           ProcessId ;
  45.     ULONG           ThreadId ;
  46.     ULONG           Attributes ;
  47.     ULONG           Reserved ;
  48. } SECPKG_CALL_INFO, * PSECPKG_CALL_INFO ;
  49.  
  50. #define SECPKG_CALL_KERNEL_MODE 0x00000001  // Call originated in kernel mode
  51. #define SECPKG_CALL_ANSI        0x00000002  // Call came from ANSI stub
  52. #define SECPKG_CALL_URGENT      0x00000004  // Call designated urgent
  53.  
  54.  
  55. //
  56. // This flag is used for to indicate which buffers in the SPMgr are located
  57. // in the client's address space
  58. //
  59.  
  60. #define SECBUFFER_UNMAPPED 0x40000000
  61.  
  62.  
  63. //////////////////////////////////////////////////////////////////////////
  64. //
  65. // The following prototypes are to functions that are provided by the SPMgr
  66. // to security packages.
  67. //
  68. //////////////////////////////////////////////////////////////////////////
  69.  
  70. typedef NTSTATUS
  71. (NTAPI LSA_IMPERSONATE_CLIENT) (
  72.     VOID
  73.     );
  74.  
  75.  
  76. typedef NTSTATUS
  77. (NTAPI LSA_UNLOAD_PACKAGE)(
  78.     VOID
  79.     );
  80.  
  81. typedef NTSTATUS
  82. (NTAPI LSA_DUPLICATE_HANDLE)(
  83.     IN HANDLE SourceHandle,
  84.     OUT PHANDLE DestionationHandle);
  85.  
  86.  
  87. typedef NTSTATUS
  88. (NTAPI LSA_SAVE_SUPPLEMENTAL_CREDENTIALS)(
  89.     IN PLUID LogonId,
  90.     IN ULONG SupplementalCredSize,
  91.     IN PVOID SupplementalCreds,
  92.     IN BOOLEAN Synchronous
  93.     );
  94.  
  95. #ifdef _WINDEF_
  96.  
  97. typedef NTSTATUS
  98. (NTAPI LSA_GET_WINDOW)(
  99.     OUT HWND * Window
  100.     );
  101.  
  102. #else
  103.  
  104. typedef NTSTATUS
  105. (NTAPI LSA_GET_WINDOW)(
  106.     OUT HANDLE * Window
  107.     );
  108.  
  109. #endif
  110.  
  111. typedef VOID
  112. (NTAPI LSA_RELEASE_WINDOW)(
  113.     VOID
  114.     );
  115.  
  116.  
  117.  
  118. typedef HANDLE
  119. (NTAPI LSA_CREATE_THREAD)(
  120.     IN SEC_ATTRS SecurityAttributes,
  121.     IN ULONG StackSize,
  122.     IN SEC_THREAD_START StartFunction,
  123.     IN PVOID ThreadParameter,
  124.     IN ULONG CreationFlags,
  125.     OUT PULONG ThreadId
  126.     );
  127.  
  128.  
  129. typedef NTSTATUS
  130. (NTAPI LSA_GET_CLIENT_INFO)(
  131.     OUT PSECPKG_CLIENT_INFO ClientInfo
  132.     );
  133.  
  134.  
  135.  
  136. typedef HANDLE
  137. (NTAPI LSA_REGISTER_NOTIFICATION)(
  138.     IN SEC_THREAD_START StartFunction,
  139.     IN PVOID Parameter,
  140.     IN ULONG NotificationType,
  141.     IN ULONG NotificationClass,
  142.     IN ULONG NotificationFlags,
  143.     IN ULONG IntervalMinutes,
  144.     IN OPTIONAL HANDLE WaitEvent
  145.     );
  146.  
  147.  
  148. typedef NTSTATUS
  149. (NTAPI LSA_CANCEL_NOTIFICATION)(
  150.     IN HANDLE NotifyHandle
  151.     );
  152.  
  153. typedef NTSTATUS
  154. (NTAPI LSA_MAP_BUFFER)(
  155.     IN PSecBuffer InputBuffer,
  156.     OUT PSecBuffer OutputBuffer
  157.     );
  158.  
  159. typedef NTSTATUS
  160. (NTAPI LSA_CREATE_TOKEN) (
  161.     IN PLUID LogonId,
  162.     IN PTOKEN_SOURCE TokenSource,
  163.     IN SECURITY_LOGON_TYPE LogonType,
  164.     IN LSA_TOKEN_INFORMATION_TYPE TokenInformationType,
  165.     IN PVOID TokenInformation,
  166.     IN PTOKEN_GROUPS TokenGroups,
  167.     IN PUNICODE_STRING AccountName,
  168.     IN PUNICODE_STRING AuthorityName,
  169.     IN PUNICODE_STRING Workstation,
  170.     OUT PHANDLE Token,
  171.     OUT PNTSTATUS SubStatus
  172.     );
  173.  
  174. typedef VOID
  175. (NTAPI LSA_AUDIT_LOGON) (
  176.     IN NTSTATUS Status,
  177.     IN NTSTATUS SubStatus,
  178.     IN PUNICODE_STRING AccountName,
  179.     IN PUNICODE_STRING AuthenticatingAuthority,
  180.     IN PUNICODE_STRING WorkstationName,
  181.     IN OPTIONAL PSID UserSid,
  182.     IN SECURITY_LOGON_TYPE LogonType,
  183.     IN PTOKEN_SOURCE TokenSource,
  184.     IN PLUID LogonId
  185.     );
  186.  
  187. typedef NTSTATUS
  188. (NTAPI LSA_CALL_PACKAGE) (
  189.     IN PUNICODE_STRING AuthenticationPackage,
  190.     IN PVOID ProtocolSubmitBuffer,
  191.     IN ULONG SubmitBufferLength,
  192.     OUT PVOID *ProtocolReturnBuffer,
  193.     OUT PULONG ReturnBufferLength,
  194.     OUT PNTSTATUS ProtocolStatus
  195.     );
  196.  
  197. typedef VOID
  198. (NTAPI LSA_FREE_LSA_HEAP) (
  199.     IN PVOID Base
  200.     );
  201.  
  202. typedef BOOLEAN
  203. (NTAPI LSA_GET_CALL_INFO) (
  204.     OUT PSECPKG_CALL_INFO   Info
  205.     );
  206.  
  207.  
  208. #define NOTIFIER_FLAG_NEW_THREAD    0x00000001
  209. #define NOTIFIER_FLAG_ONE_SHOT      0x00000002
  210. #define NOTIFIER_FLAG_HANDLE_FREE   0x00000004
  211. #define NOTIFIER_FLAG_SECONDS       0x80000000
  212.  
  213. #define NOTIFIER_TYPE_INTERVAL      1
  214. #define NOTIFIER_TYPE_HANDLE_WAIT   2
  215. #define NOTIFIER_TYPE_STATE_CHANGE  3
  216. #define NOTIFIER_TYPE_NOTIFY_EVENT  4
  217. #define NOTIFIER_TYPE_IMMEDIATE 16
  218.  
  219. #define NOTIFY_CLASS_PACKAGE_CHANGE 1
  220.  
  221. typedef struct _SECPKG_EVENT_PACKAGE_CHANGE {
  222.     ULONG   ChangeType;
  223.     ULONG   PackageId;
  224.     SECURITY_STRING PackageName;
  225. } SECPKG_EVENT_PACKAGE_CHANGE, * PSECPKG_EVENT_PACKAGE_CHANGE ;
  226.  
  227. #define SECPKG_PACKAGE_CHANGE_LOAD      0
  228. #define SECPKG_PACKAGE_CHANGE_UNLOAD    1
  229. #define SECPKG_PACKAGE_CHANGE_SELECT    2
  230.  
  231. typedef struct _SECPKG_EVENT_NOTIFY {
  232.     ULONG EventClass;
  233.     ULONG Reserved;
  234.     ULONG EventDataSize;
  235.     PVOID EventData;
  236.     PVOID PackageParameter;
  237. } SECPKG_EVENT_NOTIFY, *PSECPKG_EVENT_NOTIFY ;
  238.  
  239. typedef LSA_IMPERSONATE_CLIENT * PLSA_IMPERSONATE_CLIENT;
  240. typedef LSA_UNLOAD_PACKAGE * PLSA_UNLOAD_PACKAGE;
  241. typedef LSA_DUPLICATE_HANDLE * PLSA_DUPLICATE_HANDLE ;
  242. typedef LSA_SAVE_SUPPLEMENTAL_CREDENTIALS * PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS;
  243. typedef LSA_GET_WINDOW * PLSA_GET_WINDOW;
  244. typedef LSA_RELEASE_WINDOW * PLSA_RELEASE_WINDOW;
  245. typedef LSA_CREATE_THREAD * PLSA_CREATE_THREAD;
  246. typedef LSA_GET_CLIENT_INFO * PLSA_GET_CLIENT_INFO;
  247. typedef LSA_REGISTER_NOTIFICATION * PLSA_REGISTER_NOTIFICATION;
  248. typedef LSA_CANCEL_NOTIFICATION * PLSA_CANCEL_NOTIFICATION;
  249. typedef LSA_MAP_BUFFER * PLSA_MAP_BUFFER;
  250. typedef LSA_CREATE_TOKEN * PLSA_CREATE_TOKEN;
  251. typedef LSA_AUDIT_LOGON * PLSA_AUDIT_LOGON;
  252. typedef LSA_CALL_PACKAGE * PLSA_CALL_PACKAGE;
  253. typedef LSA_GET_CALL_INFO * PLSA_GET_CALL_INFO ;
  254.  
  255.  
  256. // Functions provided by the SPM to the packages:
  257. typedef struct _LSA_SECPKG_FUNCTION_TABLE {
  258.     PLSA_CREATE_LOGON_SESSION CreateLogonSession;
  259.     PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
  260.     PLSA_ADD_CREDENTIAL AddCredential;
  261.     PLSA_GET_CREDENTIALS GetCredentials;
  262.     PLSA_DELETE_CREDENTIAL DeleteCredential;
  263.     PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
  264.     PLSA_FREE_LSA_HEAP FreeLsaHeap;
  265.     PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
  266.     PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
  267.     PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
  268.     PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
  269.     PLSA_IMPERSONATE_CLIENT ImpersonateClient;
  270.     PLSA_UNLOAD_PACKAGE UnloadPackage;
  271.     PLSA_DUPLICATE_HANDLE DuplicateHandle;
  272.     PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials;
  273.     PLSA_GET_WINDOW GetWindow;
  274.     PLSA_RELEASE_WINDOW ReleaseWindow;
  275.     PLSA_CREATE_THREAD CreateThread;
  276.     PLSA_GET_CLIENT_INFO GetClientInfo;
  277.     PLSA_REGISTER_NOTIFICATION RegisterNotification;
  278.     PLSA_CANCEL_NOTIFICATION CancelNotification;
  279.     PLSA_MAP_BUFFER MapBuffer;
  280.     PLSA_CREATE_TOKEN CreateToken;
  281.     PLSA_AUDIT_LOGON AuditLogon;
  282.     PLSA_CALL_PACKAGE CallPackage;
  283.     PLSA_FREE_LSA_HEAP FreeReturnBuffer;
  284.     PLSA_GET_CALL_INFO GetCallInfo;
  285. } LSA_SECPKG_FUNCTION_TABLE, *PLSA_SECPKG_FUNCTION_TABLE;
  286.  
  287. typedef struct _SECPKG_DLL_FUNCTIONS {
  288.     PLSA_ALLOCATE_LSA_HEAP AllocateHeap;
  289.     PLSA_FREE_LSA_HEAP FreeHeap;
  290. } SECPKG_DLL_FUNCTIONS, * PSECPKG_DLL_FUNCTIONS;
  291.  
  292.  
  293.  
  294. #define PRIMARY_CRED_CLEAR_PASSWORD 0x1
  295. #define PRIMARY_CRED_OWF_PASSWORD 0x2
  296.  
  297. typedef struct _SECPKG_PRIMARY_CRED {
  298.     LUID LogonId;
  299.     UNICODE_STRING DownlevelName;
  300.     UNICODE_STRING DomainName;
  301.     UNICODE_STRING Password;
  302.     PSID UserSid;
  303.     ULONG Flags;
  304. } SECPKG_PRIMARY_CRED, *PSECPKG_PRIMARY_CRED;
  305.  
  306. //
  307. // Maximum size of stored credentials.
  308. //
  309.  
  310. #define MAX_CRED_SIZE 1024
  311.  
  312. typedef struct _SECPKG_PARAMETERS {
  313.     ULONG           Version;
  314.     ULONG           MachineState;
  315.     ULONG           SetupMode;
  316.     UNICODE_STRING  DomainName;
  317.     PSID            DomainSid;
  318. } SECPKG_PARAMETERS, *PSECPKG_PARAMETERS;
  319.  
  320. typedef struct _SECPKG_SUPPLEMENTAL_CRED {
  321.     UNICODE_STRING PackageName;
  322.     ULONG CredentialSize;
  323.     PUCHAR Credentials;
  324. } SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED;
  325.  
  326.  
  327. //
  328. // Extended Package information structures
  329. //
  330.  
  331. #define SECPKG_INFO_GSS_INFO    1
  332.  
  333. typedef struct _SECPKG_GSS_INFO {
  334.     PUCHAR  EncodedId;
  335. } SECPKG_GSS_INFO, * PSECPKG_GSS_INFO ;
  336.  
  337.  
  338.  
  339.  
  340. //
  341. // The following prototypes are to functions that will be called only while
  342. // in the Security Package Manager context.
  343. //
  344.  
  345. typedef NTSTATUS
  346. (LSA_AP_INITIALIZE_PACKAGE) (
  347.     IN ULONG AuthenticationPackageId,
  348.     IN PLSA_DISPATCH_TABLE LsaDispatchTable,
  349.     IN PLSA_STRING Database OPTIONAL,
  350.     IN PLSA_STRING Confidentiality OPTIONAL,
  351.     OUT PLSA_STRING *AuthenticationPackageName
  352.     );
  353.  
  354. typedef NTSTATUS
  355. (LSA_AP_LOGON_USER) (
  356.     IN PLSA_CLIENT_REQUEST ClientRequest,
  357.     IN SECURITY_LOGON_TYPE LogonType,
  358.     IN PVOID AuthenticationInformation,
  359.     IN PVOID ClientAuthenticationBase,
  360.     IN ULONG AuthenticationInformationLength,
  361.     OUT PVOID *ProfileBuffer,
  362.     OUT PULONG ProfileBufferLength,
  363.     OUT PLUID LogonId,
  364.     OUT PNTSTATUS SubStatus,
  365.     OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
  366.     OUT PVOID *TokenInformation,
  367.     OUT PLSA_UNICODE_STRING *AccountName,
  368.     OUT PLSA_UNICODE_STRING *AuthenticatingAuthority
  369.     );
  370.  
  371. typedef NTSTATUS
  372. (LSA_AP_LOGON_USER_EX) (
  373.     IN PLSA_CLIENT_REQUEST ClientRequest,
  374.     IN SECURITY_LOGON_TYPE LogonType,
  375.     IN PVOID AuthenticationInformation,
  376.     IN PVOID ClientAuthenticationBase,
  377.     IN ULONG AuthenticationInformationLength,
  378.     OUT PVOID *ProfileBuffer,
  379.     OUT PULONG ProfileBufferLength,
  380.     OUT PLUID LogonId,
  381.     OUT PNTSTATUS SubStatus,
  382.     OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
  383.     OUT PVOID *TokenInformation,
  384.     OUT PUNICODE_STRING *AccountName,
  385.     OUT PUNICODE_STRING *AuthenticatingAuthority,
  386.     OUT PUNICODE_STRING *MachineName
  387.     );
  388.  
  389. typedef NTSTATUS
  390. (LSA_AP_CALL_PACKAGE) (
  391.     IN PLSA_CLIENT_REQUEST ClientRequest,
  392.     IN PVOID ProtocolSubmitBuffer,
  393.     IN PVOID ClientBufferBase,
  394.     IN ULONG SubmitBufferLength,
  395.     OUT PVOID *ProtocolReturnBuffer,
  396.     OUT PULONG ReturnBufferLength,
  397.     OUT PNTSTATUS ProtocolStatus
  398.     );
  399.  
  400. typedef VOID
  401. (LSA_AP_LOGON_TERMINATED) (
  402.     IN PLUID LogonId
  403.     );
  404.  
  405. typedef LSA_AP_CALL_PACKAGE LSA_AP_CALL_PACKAGE_UNTRUSTED;
  406.  
  407.  
  408. typedef NTSTATUS
  409. (NTAPI SpInitializeFn)(
  410.     IN ULONG PackageId,
  411.     IN PSECPKG_PARAMETERS Parameters,
  412.     IN PLSA_SECPKG_FUNCTION_TABLE FunctionTable
  413.     );
  414.  
  415. typedef NTSTATUS
  416. (NTAPI SpShutdownFn)(
  417.     VOID
  418.     );
  419.  
  420. typedef NTSTATUS
  421. (NTAPI SpGetInfoFn)(
  422.     OUT PSecPkgInfo PackageInfo
  423.     );
  424.  
  425. typedef NTSTATUS
  426. (LSA_AP_LOGON_USER_EX2) (
  427.     IN PLSA_CLIENT_REQUEST ClientRequest,
  428.     IN SECURITY_LOGON_TYPE LogonType,
  429.     IN PVOID AuthenticationInformation,
  430.     IN PVOID ClientAuthenticationBase,
  431.     IN ULONG AuthenticationInformationLength,
  432.     OUT PVOID *ProfileBuffer,
  433.     OUT PULONG ProfileBufferLength,
  434.     OUT PLUID LogonId,
  435.     OUT PNTSTATUS SubStatus,
  436.     OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
  437.     OUT PVOID *TokenInformation,
  438.     OUT PUNICODE_STRING *AccountName,
  439.     OUT PUNICODE_STRING *AuthenticatingAuthority,
  440.     OUT PUNICODE_STRING *MachineName,
  441.     OUT PSECPKG_PRIMARY_CRED PrimaryCredentials,
  442.     OUT PULONG CachedCredentialCount,
  443.     OUT PSECPKG_SUPPLEMENTAL_CRED * CachedCredentials
  444.     );
  445.  
  446. typedef LSA_AP_LOGON_USER_EX2 *PLSA_AP_LOGON_USER_EX2;
  447. #define LSA_AP_NAME_LOGON_USER_EX2 "LsaApLogonUserEx2\0"
  448.  
  449. typedef NTSTATUS
  450. (NTAPI SpAcceptCredentialsFn)(
  451.     IN SECURITY_LOGON_TYPE LogonType,
  452.     IN PUNICODE_STRING AccountName,
  453.     IN PSECPKG_PRIMARY_CRED PrimaryCredentials,
  454.     IN PSECPKG_SUPPLEMENTAL_CRED SupplementalCredentials
  455.     );
  456. #define SP_ACCEPT_CREDENTIALS_NAME "SpAcceptCredentials\0"
  457.  
  458. typedef NTSTATUS
  459. (NTAPI SpAcquireCredentialsHandleFn)(
  460.     IN OPTIONAL PUNICODE_STRING PrincipalName,
  461.     IN ULONG CredentialUseFlags,
  462.     IN OPTIONAL PLUID LogonId,
  463.     IN PVOID AuthorizationData,
  464.     IN PVOID GetKeyFunciton,
  465.     IN PVOID GetKeyArgument,
  466.     OUT PULONG CredentialHandle,
  467.     OUT PTimeStamp ExpirationTime
  468.     );
  469.  
  470. typedef NTSTATUS
  471. (NTAPI SpFreeCredentialsHandleFn)(
  472.     IN ULONG CredentialHandle
  473.     );
  474.  
  475. typedef NTSTATUS
  476. (NTAPI SpQueryCredentialsAttributesFn)(
  477.     IN ULONG CredentialHandle,
  478.     IN ULONG CredentialAttribute,
  479.     IN OUT PVOID Buffer
  480.     );
  481.  
  482. typedef NTSTATUS
  483. (NTAPI SpSaveCredentialsFn)(
  484.     IN ULONG CredentialHandle,
  485.     IN PSecBuffer Credentials);
  486.  
  487. typedef NTSTATUS
  488. (NTAPI SpGetCredentialsFn)(
  489.     IN ULONG CredentialHandle,
  490.     IN OUT PSecBuffer Credentials
  491.     );
  492.  
  493. typedef NTSTATUS
  494. (NTAPI SpDeleteCredentialsFn)(
  495.     IN ULONG CredentialHandle,
  496.     IN PSecBuffer Key
  497.     );
  498.  
  499. typedef NTSTATUS
  500. (NTAPI SpInitLsaModeContextFn)(
  501.     IN OPTIONAL ULONG CredentialHandle,
  502.     IN OPTIONAL ULONG ContextHandle,
  503.     IN OPTIONAL PUNICODE_STRING TargetName,
  504.     IN ULONG ContextRequirements,
  505.     IN ULONG TargetDataRep,
  506.     IN PSecBufferDesc InputBuffers,
  507.     OUT PULONG NewContextHandle,
  508.     IN OUT PSecBufferDesc OutputBuffers,
  509.     OUT PULONG ContextAttributes,
  510.     OUT PTimeStamp ExpirationTime,
  511.     OUT PBOOLEAN MappedContext,
  512.     OUT PSecBuffer ContextData
  513.     );
  514.  
  515.  
  516.  
  517.  
  518. typedef NTSTATUS
  519. (NTAPI SpDeleteContextFn)(
  520.     IN ULONG ContextHandle
  521.     );
  522.  
  523. typedef NTSTATUS
  524. (NTAPI SpApplyControlTokenFn)(
  525.     IN ULONG ContextHandle,
  526.     IN PSecBufferDesc ControlToken);
  527.  
  528.  
  529. typedef NTSTATUS
  530. (NTAPI SpAcceptLsaModeContextFn)(
  531.     IN OPTIONAL ULONG CredentialHandle,
  532.     IN OPTIONAL ULONG ContextHandle,
  533.     IN PSecBufferDesc InputBuffer,
  534.     IN ULONG ContextRequirements,
  535.     IN ULONG TargetDataRep,
  536.     OUT PULONG NewContextHandle,
  537.     OUT PSecBufferDesc OutputBuffer,
  538.     OUT PULONG ContextAttributes,
  539.     OUT PTimeStamp ExpirationTime,
  540.     OUT PBOOLEAN MappedContext,
  541.     OUT PSecBuffer ContextData
  542.     );
  543.  
  544.  
  545.  
  546.  
  547. typedef NTSTATUS
  548. (NTAPI SpGetUserInfoFn)(
  549.     IN PLUID LogonId,
  550.     IN ULONG Flags,
  551.     OUT PSecurityUserData * UserData
  552.     );
  553.  
  554.  
  555.  
  556. typedef
  557. NTSTATUS
  558. (NTAPI SpGetExtendedInformationFn)(
  559.     IN ULONG PackageInformationType,
  560.     OUT PVOID * PackageInformation
  561.     );
  562.  
  563.  
  564. typedef struct _SECPKG_FUNCTION_TABLE {
  565.     PLSA_AP_INITIALIZE_PACKAGE InitializePackage;
  566.     PLSA_AP_LOGON_USER LogonUser;
  567.     PLSA_AP_CALL_PACKAGE CallPackage;
  568.     PLSA_AP_LOGON_TERMINATED LogonTerminated;
  569.     PLSA_AP_CALL_PACKAGE_UNTRUSTED CallPackageUntrusted;
  570.     PLSA_AP_LOGON_USER_EX LogonUserEx;
  571.     PLSA_AP_LOGON_USER_EX2 LogonUserEx2;
  572.     SpInitializeFn * Initialize;
  573.     SpShutdownFn * Shutdown;
  574.     SpGetInfoFn * GetInfo;
  575.     SpAcceptCredentialsFn * AcceptCredentials;
  576.     SpAcquireCredentialsHandleFn * AcquireCredentialsHandle;
  577.     SpQueryCredentialsAttributesFn * QueryCredentialsAttributes;
  578.     SpFreeCredentialsHandleFn * FreeCredentialsHandle;
  579.     SpSaveCredentialsFn * SaveCredentials;
  580.     SpGetCredentialsFn * GetCredentials;
  581.     SpDeleteCredentialsFn * DeleteCredentials;
  582.     SpInitLsaModeContextFn * InitLsaModeContext;
  583.     SpAcceptLsaModeContextFn * AcceptLsaModeContext;
  584.     SpDeleteContextFn * DeleteContext;
  585.     SpApplyControlTokenFn * ApplyControlToken;
  586.     SpGetUserInfoFn * GetUserInfo;
  587. } SECPKG_FUNCTION_TABLE, *PSECPKG_FUNCTION_TABLE;
  588.  
  589. //
  590. // The following prototypes are to functions that will be called while in the
  591. // context of a user process that is using the functions through the security
  592. // DLL.
  593. //
  594.  
  595. typedef NTSTATUS
  596. (NTAPI SpInstanceInitFn)(
  597.     IN ULONG Version,
  598.     IN PSECPKG_DLL_FUNCTIONS FunctionTable,
  599.     OUT PVOID * UserFunctions
  600.     );
  601.  
  602.  
  603. typedef NTSTATUS
  604. (NTAPI SpInitUserModeContextFn)(
  605.     IN ULONG ContextHandle,
  606.     IN PSecBuffer PackedContext
  607.     );
  608.  
  609. typedef NTSTATUS
  610. (NTAPI SpMakeSignatureFn)(
  611.     IN ULONG ContextHandle,
  612.     IN ULONG QualityOfProtection,
  613.     IN PSecBufferDesc MessageBuffers,
  614.     IN ULONG MessageSequenceNumber
  615.     );
  616.  
  617. typedef NTSTATUS
  618. (NTAPI SpVerifySignatureFn)(
  619.     IN ULONG ContextHandle,
  620.     IN PSecBufferDesc MessageBuffers,
  621.     IN ULONG MessageSequenceNumber,
  622.     OUT PULONG QualityOfProtection
  623.     );
  624.  
  625. typedef NTSTATUS
  626. (NTAPI SpSealMessageFn)(
  627.     IN ULONG ContextHandle,
  628.     IN ULONG QualityOfProtection,
  629.     IN PSecBufferDesc MessageBuffers,
  630.     IN ULONG MessageSequenceNumber
  631.     );
  632.  
  633. typedef NTSTATUS
  634. (NTAPI SpUnsealMessageFn)(
  635.     IN ULONG ContextHandle,
  636.     IN PSecBufferDesc MessageBuffers,
  637.     IN ULONG MessageSequenceNumber,
  638.     OUT PULONG QualityOfProtection
  639.     );
  640.  
  641.  
  642. typedef NTSTATUS
  643. (NTAPI SpGetContextTokenFn)(
  644.     IN ULONG ContextHandle,
  645.     OUT PHANDLE ImpersonationToken
  646.     );
  647.  
  648. typedef NTSTATUS
  649. (NTAPI SpQueryContextAttributesFn)(
  650.     IN ULONG ContextHandle,
  651.     IN ULONG ContextAttribute,
  652.     IN OUT PVOID Buffer);
  653.  
  654.  
  655. typedef NTSTATUS
  656. (NTAPI SpCompleteAuthTokenFn)(
  657.     IN ULONG ContextHandle,
  658.     IN PSecBufferDesc InputBuffer
  659.     );
  660.  
  661.  
  662. typedef NTSTATUS
  663. (NTAPI SpFormatCredentialsFn)(
  664.     IN PSecBuffer Credentials,
  665.     OUT PSecBuffer FormattedCredentials
  666.     );
  667.  
  668. typedef NTSTATUS
  669. (NTAPI SpMarshallSupplementalCredsFn)(
  670.     IN ULONG CredentialSize,
  671.     IN PUCHAR Credentials,
  672.     OUT PULONG MarshalledCredSize,
  673.     OUT PVOID * MarshalledCreds);
  674.  
  675.  
  676. typedef struct _SECPKG_USER_FUNCTION_TABLE {
  677.     SpInstanceInitFn *                      InstanceInit;
  678.     SpInitUserModeContextFn *               InitUserModeContext;
  679.     SpMakeSignatureFn *                     MakeSignature;
  680.     SpVerifySignatureFn *                   VerifySignature;
  681.     SpSealMessageFn *                       SealMessage;
  682.     SpUnsealMessageFn *                     UnsealMessage;
  683.     SpGetContextTokenFn *                   GetContextToken;
  684.     SpQueryContextAttributesFn *            QueryContextAttributes;
  685.     SpCompleteAuthTokenFn *                 CompleteAuthToken;
  686.     SpDeleteContextFn *                     DeleteUserModeContext;
  687.     SpFormatCredentialsFn *                 FormatCredentials;
  688.     SpMarshallSupplementalCredsFn *         MarshallSupplementalCreds;
  689. } SECPKG_USER_FUNCTION_TABLE, *PSECPKG_USER_FUNCTION_TABLE;
  690.  
  691. typedef NTSTATUS
  692. (SEC_ENTRY * SpLsaModeInitializeFn)(
  693.     IN ULONG LsaVersion,
  694.     OUT PULONG PackageVersion,
  695.     OUT PSECPKG_FUNCTION_TABLE * ppTables,
  696.     OUT PULONG pcTables);
  697.  
  698. typedef NTSTATUS
  699. (SEC_ENTRY * SpUserModeInitializeFn)(
  700.     IN ULONG LsaVersion,
  701.     OUT PULONG PackageVersion,
  702.     OUT PSECPKG_USER_FUNCTION_TABLE *ppTables,
  703.     OUT PULONG pcTables
  704.     );
  705.  
  706.  
  707. #define SP_ORDINAL_LSA_INIT                     0
  708. #define SP_ORDINAL_LOGONUSER                    1
  709. #define SP_ORDINAL_CALLPACKAGE                  2
  710. #define SP_ORDINAL_LOGONTERMINATED              3
  711. #define SP_ORDINAL_CALLPACKAGEUNTRUSTED         4
  712. #define SP_ORDINAL_LOGONUSEREX                  5
  713. #define SP_ORDINAL_LOGONUSEREX2                 6
  714. #define SP_ORDINAL_INITIALIZE                   7
  715. #define SP_ORDINAL_SHUTDOWN                     8
  716. #define SP_ORDINAL_GETINFO                      9
  717. #define SP_ORDINAL_ACCEPTCREDS                  10
  718. #define SP_ORDINAL_ACQUIRECREDHANDLE            11
  719. #define SP_ORDINAL_QUERYCREDATTR                12
  720. #define SP_ORDINAL_FREECREDHANDLE               13
  721. #define SP_ORDINAL_SAVECRED                     14
  722. #define SP_ORDINAL_GETCRED                      15
  723. #define SP_ORDINAL_DELETECRED                   16
  724. #define SP_ORDINAL_INITLSAMODECTXT              17
  725. #define SP_ORDINAL_ACCEPTLSAMODECTXT            18
  726. #define SP_ORDINAL_DELETECTXT                   19
  727. #define SP_ORDINAL_APPLYCONTROLTOKEN            20
  728. #define SP_ORDINAL_GETUSERINFO                  21
  729. #define SP_ORDINAL_GRANTPROXY                   22
  730. #define SP_ORDINAL_REVOKEPROXY                  23
  731. #define SP_ORDINAL_INVOKEPROXY                  24
  732. #define SP_ORDINAL_RENEWPROXY                   25
  733.  
  734.  
  735. #define SP_MAX_TABLE_ORDINAL            (SP_ORDINAL_RENEWPROXY + 1)
  736. #define SP_MAX_AUTHPKG_ORDINAL          (SP_ORDINAL_LOGONUSEREX)
  737.  
  738. #define SP_ORDINAL_INSTANCEINIT         32
  739.  
  740.  
  741. #define SECPKG_LSAMODEINIT_NAME     "SpLsaModeInitialize"
  742. #define SECPKG_USERMODEINIT_NAME    "SpUserModeInitialize"
  743.  
  744. #define SECPKG_INTERFACE_VERSION    0x00010000
  745.  
  746.  
  747.  
  748. typedef struct _SECPKG_KERNEL_FUNCTIONS {
  749.     PLSA_ALLOCATE_LSA_HEAP AllocateHeap;
  750.     PLSA_FREE_LSA_HEAP FreeHeap;
  751. } SECPKG_KERNEL_FUNCTIONS, *PSECPKG_KERNEL_FUNCTIONS;
  752.  
  753. typedef NTSTATUS
  754. (NTAPI KspInitPackageFn)(
  755.     PSECPKG_KERNEL_FUNCTIONS    FunctionTable
  756.     );
  757.  
  758. typedef NTSTATUS
  759. (NTAPI KspDeleteContextFn)(
  760.     IN ULONG ContextId,
  761.     OUT PULONG LsaContextId
  762.     );
  763.  
  764. typedef NTSTATUS
  765. (NTAPI KspInitContextFn)(
  766.     IN ULONG ContextId,
  767.     IN PSecBuffer ContextData,
  768.     OUT PULONG NewContextId
  769.     );
  770.  
  771. typedef NTSTATUS
  772. (NTAPI KspMakeSignatureFn)(
  773.     IN ULONG ContextId,
  774.     IN ULONG fQOP,
  775.     IN OUT PSecBufferDesc Message,
  776.     IN ULONG MessageSeqNo
  777.     );
  778.  
  779. typedef NTSTATUS
  780. (NTAPI KspVerifySignatureFn)(
  781.     IN ULONG ContextId,
  782.     IN OUT PSecBufferDesc Message,
  783.     IN ULONG MessageSeqNo,
  784.     OUT PULONG pfQOP
  785.     );
  786.  
  787.  
  788. typedef NTSTATUS
  789. (NTAPI KspSealMessageFn)(
  790.     IN ULONG ContextId,
  791.     IN ULONG fQOP,
  792.     IN OUT PSecBufferDesc Message,
  793.     IN ULONG MessageSeqNo
  794.     );
  795.  
  796. typedef NTSTATUS
  797. (NTAPI KspUnsealMessageFn)(
  798.     IN ULONG ContextId,
  799.     IN OUT PSecBufferDesc Message,
  800.     IN ULONG MessageSeqNo,
  801.     OUT PULONG pfQOP
  802.     );
  803.  
  804. typedef NTSTATUS
  805. (NTAPI KspGetTokenFn)(
  806.     IN ULONG ContextId,
  807.     OUT PHANDLE ImpersonationToken,
  808.     OUT OPTIONAL PACCESS_TOKEN * RawToken
  809.     );
  810.  
  811. typedef NTSTATUS
  812. (NTAPI KspQueryAttributesFn)(
  813.     IN ULONG ContextId,
  814.     IN ULONG Attribute,
  815.     IN OUT PVOID Buffer
  816.     );
  817.  
  818. typedef NTSTATUS
  819. (NTAPI KspCompleteTokenFn)(
  820.     IN ULONG ContextId,
  821.     IN PSecBufferDesc Token
  822.     );
  823.  
  824.  
  825. typedef NTSTATUS
  826. (NTAPI KspMapHandleFn)(
  827.     IN ULONG ContextId,
  828.     OUT PULONG LsaContextId
  829.     );
  830.  
  831. typedef struct _SECPKG_KERNEL_FUNCTION_TABLE {
  832.     KspInitPackageFn *      Initialize;
  833.     KspDeleteContextFn *    DeleteContext;
  834.     KspInitContextFn *      InitContext;
  835.     KspMapHandleFn *        MapHandle;
  836.     KspMakeSignatureFn *    Sign;
  837.     KspVerifySignatureFn *  Verify;
  838.     KspSealMessageFn *      Seal;
  839.     KspUnsealMessageFn *    Unseal;
  840.     KspGetTokenFn *         GetToken;
  841.     KspQueryAttributesFn *  QueryAttributes;
  842.     KspCompleteTokenFn *    CompleteToken;
  843. } SECPKG_KERNEL_FUNCTION_TABLE, *PSECPKG_KERNEL_FUNCTION_TABLE;
  844.  
  845. SECURITY_STATUS
  846. SEC_ENTRY
  847. KsecRegisterSecurityProvider(
  848.     PSECURITY_STRING    ProviderName,
  849.     PSECPKG_KERNEL_FUNCTION_TABLE Table
  850.     );
  851.  
  852.  
  853. extern SECPKG_KERNEL_FUNCTIONS KspKernelFunctions;
  854.  
  855.  
  856. //
  857. // Common types used by negotiable security packages
  858. //
  859.  
  860. #define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x4
  861.  
  862. #endif // __SECPKG_H__
  863.